package com.huanf.utils;

import com.huanf.domain.JingDong;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

/**
 * @author: 35238
 * 功能: Html解析的工具类
 * 时间: 2023-11-12 20:50
 */
public class HtmlParseUtil {

    //解析京东的请求
    public List<JingDong> parseJD(String keywords) throws IOException {

        //解决搜索词乱码的问题
        keywords = URLEncoder.encode(keywords, String.valueOf(StandardCharsets.UTF_8));

        //解析的地址
        String xxurl = "https://search.jd.com/Search?keyword="+keywords;

        //开始解析。下面那行的document就是浏览器的Document对象
        Document document = Jsoup.parse(new URL(xxurl), 30000);

        //可以通过上面那行的document，调用所有JavaScript有的方法
        Element xxelement = document.getElementById("J_goodsList");//获取id为J_goodsList的标签元素
        //进一步获取J_goodsList标签内的每一个<li></li>标签
        Elements xxli = xxelement.getElementsByTag("li");

        //用来存放爬取到的imgUrl、price、title
        ArrayList<JingDong> JDList = new ArrayList<>();

        for (Element li : xxli){
            //在每一个<li></li>标签里面，根据img标签和data-lazy-img属性，来获取每一个商品的图片地址
            String imgUrl = li.getElementsByTag("img").eq(0).attr("data-lazy-img");
            //在每一个<li></li>标签里面，根据类标签名，来获取每一个商品的价格
            String price = li.getElementsByClass("p-price").eq(0).text();
            //在每一个<li></li>标签里面，根据类标签名，来获取每一个商品的标题
            String title = li.getElementsByClass("p-name").eq(0).text();

            //输出一下数据是否正常获取
            //System.out.println("======================================");
            //System.out.println(imgUrl);
            //System.out.println(price);
            //System.out.println(title);

            JingDong xxjingDong = new JingDong();
            xxjingDong.setImgUrl(imgUrl);
            xxjingDong.setPrice(price);
            xxjingDong.setTitle(title);

            JDList.add(xxjingDong);
        }
        return JDList;
    }
}
